home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / test / test_gettext.py < prev    next >
Text File  |  2005-10-18  |  18KB  |  451 lines

  1. import os
  2. import base64
  3. import shutil
  4. import gettext
  5. import unittest
  6.  
  7. from test.test_support import run_suite
  8.  
  9.  
  10. # TODO:
  11. #  - Add new tests, for example for "dgettext"
  12. #  - Remove dummy tests, for example testing for single and double quotes
  13. #    has no sense, it would have if we were testing a parser (i.e. pygettext)
  14. #  - Tests should have only one assert.
  15.  
  16. GNU_MO_DATA = '''\
  17. 3hIElQAAAAAGAAAAHAAAAEwAAAALAAAAfAAAAAAAAACoAAAAFQAAAKkAAAAjAAAAvwAAAKEAAADj
  18. AAAABwAAAIUBAAALAAAAjQEAAEUBAACZAQAAFgAAAN8CAAAeAAAA9gIAAKEAAAAVAwAABQAAALcD
  19. AAAJAAAAvQMAAAEAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABQAAAAYAAAACAAAAAFJh
  20. eW1vbmQgTHV4dXJ5IFlhY2gtdABUaGVyZSBpcyAlcyBmaWxlAFRoZXJlIGFyZSAlcyBmaWxlcwBU
  21. aGlzIG1vZHVsZSBwcm92aWRlcyBpbnRlcm5hdGlvbmFsaXphdGlvbiBhbmQgbG9jYWxpemF0aW9u
  22. CnN1cHBvcnQgZm9yIHlvdXIgUHl0aG9uIHByb2dyYW1zIGJ5IHByb3ZpZGluZyBhbiBpbnRlcmZh
  23. Y2UgdG8gdGhlIEdOVQpnZXR0ZXh0IG1lc3NhZ2UgY2F0YWxvZyBsaWJyYXJ5LgBtdWxsdXNrAG51
  24. ZGdlIG51ZGdlAFByb2plY3QtSWQtVmVyc2lvbjogMi4wClBPLVJldmlzaW9uLURhdGU6IDIwMDAt
  25. MDgtMjkgMTI6MTktMDQ6MDAKTGFzdC1UcmFuc2xhdG9yOiBKLiBEYXZpZCBJYsOhw7FleiA8ai1k
  26. YXZpZEBub29zLmZyPgpMYW5ndWFnZS1UZWFtOiBYWCA8cHl0aG9uLWRldkBweXRob24ub3JnPgpN
  27. SU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4
  28. NTktMQpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBub25lCkdlbmVyYXRlZC1CeTogcHlnZXR0
  29. ZXh0LnB5IDEuMQpQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD1uIT0xOwoAVGhyb2F0
  30. d29iYmxlciBNYW5ncm92ZQBIYXkgJXMgZmljaGVybwBIYXkgJXMgZmljaGVyb3MAR3V2ZiB6YnFo
  31. eXIgY2ViaXZxcmYgdmFncmVhbmd2YmFueXZtbmd2YmEgbmFxIHlicG55dm1uZ3ZiYQpmaGNjYmVn
  32. IHNiZSBsYmhlIENsZ3ViYSBjZWJ0ZW56ZiBvbCBjZWJpdnF2YXQgbmEgdmFncmVzbnByIGdiIGd1
  33. ciBUQUgKdHJnZ3JrZyB6cmZmbnRyIHBuZ255YnQgeXZvZW5lbC4AYmFjb24Ad2luayB3aW5rAA==
  34. '''
  35.  
  36. UMO_DATA = '''\
  37. 3hIElQAAAAACAAAAHAAAACwAAAAFAAAAPAAAAAAAAABQAAAABAAAAFEAAAAPAQAAVgAAAAQAAABm
  38. AQAAAQAAAAIAAAAAAAAAAAAAAAAAAAAAYWLDngBQcm9qZWN0LUlkLVZlcnNpb246IDIuMApQTy1S
  39. ZXZpc2lvbi1EYXRlOiAyMDAzLTA0LTExIDEyOjQyLTA0MDAKTGFzdC1UcmFuc2xhdG9yOiBCYXJy
  40. eSBBLiBXQXJzYXcgPGJhcnJ5QHB5dGhvbi5vcmc+Ckxhbmd1YWdlLVRlYW06IFhYIDxweXRob24t
  41. ZGV2QHB5dGhvbi5vcmc+Ck1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFp
  42. bjsgY2hhcnNldD11dGYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CkdlbmVyYXRl
  43. ZC1CeTogbWFudWFsbHkKAMKkeXoA
  44. '''
  45.  
  46. MMO_DATA = '''\
  47. 3hIElQAAAAABAAAAHAAAACQAAAADAAAALAAAAAAAAAA4AAAAeAEAADkAAAABAAAAAAAAAAAAAAAA
  48. UHJvamVjdC1JZC1WZXJzaW9uOiBObyBQcm9qZWN0IDAuMApQT1QtQ3JlYXRpb24tRGF0ZTogV2Vk
  49. IERlYyAxMSAwNzo0NDoxNSAyMDAyClBPLVJldmlzaW9uLURhdGU6IDIwMDItMDgtMTQgMDE6MTg6
  50. NTgrMDA6MDAKTGFzdC1UcmFuc2xhdG9yOiBKb2huIERvZSA8amRvZUBleGFtcGxlLmNvbT4KSmFu
  51. ZSBGb29iYXIgPGpmb29iYXJAZXhhbXBsZS5jb20+Ckxhbmd1YWdlLVRlYW06IHh4IDx4eEBleGFt
  52. cGxlLmNvbT4KTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFy
  53. c2V0PWlzby04ODU5LTE1CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFi
  54. bGUKR2VuZXJhdGVkLUJ5OiBweWdldHRleHQucHkgMS4zCgA=
  55. '''
  56.  
  57. LOCALEDIR = os.path.join('xx', 'LC_MESSAGES')
  58. MOFILE = os.path.join(LOCALEDIR, 'gettext.mo')
  59. UMOFILE = os.path.join(LOCALEDIR, 'ugettext.mo')
  60. MMOFILE = os.path.join(LOCALEDIR, 'metadata.mo')
  61. try:
  62.     LANG = os.environ['LANGUAGE']
  63. except:
  64.     LANG = 'en'
  65.  
  66.  
  67. class GettextBaseTest(unittest.TestCase):
  68.     def setUp(self):
  69.         if not os.path.isdir(LOCALEDIR):
  70.             os.makedirs(LOCALEDIR)
  71.         fp = open(MOFILE, 'wb')
  72.         fp.write(base64.decodestring(GNU_MO_DATA))
  73.         fp.close()
  74.         fp = open(UMOFILE, 'wb')
  75.         fp.write(base64.decodestring(UMO_DATA))
  76.         fp.close()
  77.         fp = open(MMOFILE, 'wb')
  78.         fp.write(base64.decodestring(MMO_DATA))
  79.         fp.close()
  80.         os.environ['LANGUAGE'] = 'xx'
  81.  
  82.     def tearDown(self):
  83.         os.environ['LANGUAGE'] = LANG
  84.         shutil.rmtree(os.path.split(LOCALEDIR)[0])
  85.  
  86.  
  87. class GettextTestCase1(GettextBaseTest):
  88.     def setUp(self):
  89.         GettextBaseTest.setUp(self)
  90.         self.localedir = os.curdir
  91.         self.mofile = MOFILE
  92.         gettext.install('gettext', self.localedir)
  93.  
  94.     def test_some_translations(self):
  95.         eq = self.assertEqual
  96.         # test some translations
  97.         eq(_('albatross'), 'albatross')
  98.         eq(_(u'mullusk'), 'bacon')
  99.         eq(_(r'Raymond Luxury Yach-t'), 'Throatwobbler Mangrove')
  100.         eq(_(ur'nudge nudge'), 'wink wink')
  101.  
  102.     def test_double_quotes(self):
  103.         eq = self.assertEqual
  104.         # double quotes
  105.         eq(_("albatross"), 'albatross')
  106.         eq(_(u"mullusk"), 'bacon')
  107.         eq(_(r"Raymond Luxury Yach-t"), 'Throatwobbler Mangrove')
  108.         eq(_(ur"nudge nudge"), 'wink wink')
  109.  
  110.     def test_triple_single_quotes(self):
  111.         eq = self.assertEqual
  112.         # triple single quotes
  113.         eq(_('''albatross'''), 'albatross')
  114.         eq(_(u'''mullusk'''), 'bacon')
  115.         eq(_(r'''Raymond Luxury Yach-t'''), 'Throatwobbler Mangrove')
  116.         eq(_(ur'''nudge nudge'''), 'wink wink')
  117.  
  118.     def test_triple_double_quotes(self):
  119.         eq = self.assertEqual
  120.         # triple double quotes
  121.         eq(_("""albatross"""), 'albatross')
  122.         eq(_(u"""mullusk"""), 'bacon')
  123.         eq(_(r"""Raymond Luxury Yach-t"""), 'Throatwobbler Mangrove')
  124.         eq(_(ur"""nudge nudge"""), 'wink wink')
  125.  
  126.     def test_multiline_strings(self):
  127.         eq = self.assertEqual
  128.         # multiline strings
  129.         eq(_('''This module provides internationalization and localization
  130. support for your Python programs by providing an interface to the GNU
  131. gettext message catalog library.'''),
  132.            '''Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba
  133. fhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH
  134. trggrkg zrffntr pngnybt yvoenel.''')
  135.  
  136.     def test_the_alternative_interface(self):
  137.         eq = self.assertEqual
  138.         # test the alternative interface
  139.         fp = open(self.mofile, 'rb')
  140.         t = gettext.GNUTranslations(fp)
  141.         fp.close()
  142.         # Install the translation object
  143.         t.install()
  144.         eq(_('nudge nudge'), 'wink wink')
  145.         # Try unicode return type
  146.         t.install(unicode=True)
  147.         eq(_('mullusk'), 'bacon')
  148.  
  149.  
  150. class GettextTestCase2(GettextBaseTest):
  151.     def setUp(self):
  152.         GettextBaseTest.setUp(self)
  153.         self.localedir = os.curdir
  154.         # Set up the bindings
  155.         gettext.bindtextdomain('gettext', self.localedir)
  156.         gettext.textdomain('gettext')
  157.         # For convenience
  158.         self._ = gettext.gettext
  159.  
  160.     def test_bindtextdomain(self):
  161.         self.assertEqual(gettext.bindtextdomain('gettext'), self.localedir)
  162.  
  163.     def test_textdomain(self):
  164.         self.assertEqual(gettext.textdomain(), 'gettext')
  165.  
  166.     def test_some_translations(self):
  167.         eq = self.assertEqual
  168.         # test some translations
  169.         eq(self._('albatross'), 'albatross')
  170.         eq(self._(u'mullusk'), 'bacon')
  171.         eq(self._(r'Raymond Luxury Yach-t'), 'Throatwobbler Mangrove')
  172.         eq(self._(ur'nudge nudge'), 'wink wink')
  173.  
  174.     def test_double_quotes(self):
  175.         eq = self.assertEqual
  176.         # double quotes
  177.         eq(self._("albatross"), 'albatross')
  178.         eq(self._(u"mullusk"), 'bacon')
  179.         eq(self._(r"Raymond Luxury Yach-t"), 'Throatwobbler Mangrove')
  180.         eq(self._(ur"nudge nudge"), 'wink wink')
  181.  
  182.     def test_triple_single_quotes(self):
  183.         eq = self.assertEqual
  184.         # triple single quotes
  185.         eq(self._('''albatross'''), 'albatross')
  186.         eq(self._(u'''mullusk'''), 'bacon')
  187.         eq(self._(r'''Raymond Luxury Yach-t'''), 'Throatwobbler Mangrove')
  188.         eq(self._(ur'''nudge nudge'''), 'wink wink')
  189.  
  190.     def test_triple_double_quotes(self):
  191.         eq = self.assertEqual
  192.         # triple double quotes
  193.         eq(self._("""albatross"""), 'albatross')
  194.         eq(self._(u"""mullusk"""), 'bacon')
  195.         eq(self._(r"""Raymond Luxury Yach-t"""), 'Throatwobbler Mangrove')
  196.         eq(self._(ur"""nudge nudge"""), 'wink wink')
  197.  
  198.     def test_multiline_strings(self):
  199.         eq = self.assertEqual
  200.         # multiline strings
  201.         eq(self._('''This module provides internationalization and localization
  202. support for your Python programs by providing an interface to the GNU
  203. gettext message catalog library.'''),
  204.            '''Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba
  205. fhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH
  206. trggrkg zrffntr pngnybt yvoenel.''')
  207.  
  208.  
  209. class PluralFormsTestCase(GettextBaseTest):
  210.     def setUp(self):
  211.         GettextBaseTest.setUp(self)
  212.         self.mofile = MOFILE
  213.  
  214.     def test_plural_forms1(self):
  215.         eq = self.assertEqual
  216.         x = gettext.ngettext('There is %s file', 'There are %s files', 1)
  217.         eq(x, 'Hay %s fichero')
  218.         x = gettext.ngettext('There is %s file', 'There are %s files', 2)
  219.         eq(x, 'Hay %s ficheros')
  220.  
  221.     def test_plural_forms2(self):
  222.         eq = self.assertEqual
  223.         fp = open(self.mofile, 'rb')
  224.         t = gettext.GNUTranslations(fp)
  225.         fp.close()
  226.         x = t.ngettext('There is %s file', 'There are %s files', 1)
  227.         eq(x, 'Hay %s fichero')
  228.         x = t.ngettext('There is %s file', 'There are %s files', 2)
  229.         eq(x, 'Hay %s ficheros')
  230.  
  231.     def test_hu(self):
  232.         eq = self.assertEqual
  233.         f = gettext.c2py('0')
  234.         s = ''.join([ str(f(x)) for x in range(200) ])
  235.         eq(s, "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
  236.  
  237.     def test_de(self):
  238.         eq = self.assertEqual
  239.         f = gettext.c2py('n != 1')
  240.         s = ''.join([ str(f(x)) for x in range(200) ])
  241.         eq(s, "10111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111")
  242.  
  243.     def test_fr(self):
  244.         eq = self.assertEqual
  245.         f = gettext.c2py('n>1')
  246.         s = ''.join([ str(f(x)) for x in range(200) ])
  247.         eq(s, "00111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111")
  248.  
  249.     def test_gd(self):
  250.         eq = self.assertEqual
  251.         f = gettext.c2py('n==1 ? 0 : n==2 ? 1 : 2')
  252.         s = ''.join([ str(f(x)) for x in range(200) ])
  253.         eq(s, "20122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222")
  254.  
  255.     def test_gd2(self):
  256.         eq = self.assertEqual
  257.         # Tests the combination of parentheses and "?:"
  258.         f = gettext.c2py('n==1 ? 0 : (n==2 ? 1 : 2)')
  259.         s = ''.join([ str(f(x)) for x in range(200) ])
  260.         eq(s, "20122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222")
  261.  
  262.     def test_lt(self):
  263.         eq = self.assertEqual
  264.         f = gettext.c2py('n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2')
  265.         s = ''.join([ str(f(x)) for x in range(200) ])
  266.         eq(s, "20111111112222222222201111111120111111112011111111201111111120111111112011111111201111111120111111112011111111222222222220111111112011111111201111111120111111112011111111201111111120111111112011111111")
  267.  
  268.     def test_ru(self):
  269.         eq = self.assertEqual
  270.         f = gettext.c2py('n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2')
  271.         s = ''.join([ str(f(x)) for x in range(200) ])
  272.         eq(s, "20111222222222222222201112222220111222222011122222201112222220111222222011122222201112222220111222222011122222222222222220111222222011122222201112222220111222222011122222201112222220111222222011122222")
  273.  
  274.     def test_pl(self):
  275.         eq = self.assertEqual
  276.         f = gettext.c2py('n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2')
  277.         s = ''.join([ str(f(x)) for x in range(200) ])
  278.         eq(s, "20111222222222222222221112222222111222222211122222221112222222111222222211122222221112222222111222222211122222222222222222111222222211122222221112222222111222222211122222221112222222111222222211122222")
  279.  
  280.     def test_sl(self):
  281.         eq = self.assertEqual
  282.         f = gettext.c2py('n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3')
  283.         s = ''.join([ str(f(x)) for x in range(200) ])
  284.         eq(s, "30122333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333012233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333")
  285.  
  286.     def test_security(self):
  287.         raises = self.assertRaises
  288.         # Test for a dangerous expression
  289.         raises(ValueError, gettext.c2py, "os.chmod('/etc/passwd',0777)")
  290.  
  291.  
  292. class UnicodeTranslationsTest(GettextBaseTest):
  293.     def setUp(self):
  294.         GettextBaseTest.setUp(self)
  295.         fp = open(UMOFILE, 'rb')
  296.         try:
  297.             self.t = gettext.GNUTranslations(fp)
  298.         finally:
  299.             fp.close()
  300.         self._ = self.t.ugettext
  301.  
  302.     def test_unicode_msgid(self):
  303.         unless = self.failUnless
  304.         unless(isinstance(self._(''), unicode))
  305.         unless(isinstance(self._(u''), unicode))
  306.  
  307.     def test_unicode_msgstr(self):
  308.         eq = self.assertEqual
  309.         eq(self._(u'ab\xde'), u'\xa4yz')
  310.  
  311.  
  312. class WeirdMetadataTest(GettextBaseTest):
  313.     def setUp(self):
  314.         GettextBaseTest.setUp(self)
  315.         fp = open(MMOFILE, 'rb')
  316.         try:
  317.             try:
  318.                 self.t = gettext.GNUTranslations(fp)
  319.             except:
  320.                 self.tearDown()
  321.                 raise
  322.         finally:
  323.             fp.close()
  324.  
  325.     def test_weird_metadata(self):
  326.         info = self.t.info()
  327.         self.assertEqual(info['last-translator'],
  328.            'John Doe <jdoe@example.com>\nJane Foobar <jfoobar@example.com>')
  329.  
  330.  
  331. def suite():
  332.     suite = unittest.TestSuite()
  333.     suite.addTest(unittest.makeSuite(GettextTestCase1))
  334.     suite.addTest(unittest.makeSuite(GettextTestCase2))
  335.     suite.addTest(unittest.makeSuite(PluralFormsTestCase))
  336.     suite.addTest(unittest.makeSuite(UnicodeTranslationsTest))
  337.     suite.addTest(unittest.makeSuite(WeirdMetadataTest))
  338.     return suite
  339.  
  340.  
  341. def test_main():
  342.     run_suite(suite())
  343.  
  344.  
  345. if __name__ == '__main__':
  346.     test_main()
  347.  
  348.  
  349. # For reference, here's the .po file used to created the GNU_MO_DATA above.
  350. #
  351. # The original version was automatically generated from the sources with
  352. # pygettext. Later it was manually modified to add plural forms support.
  353.  
  354. '''
  355. # Dummy translation for the Python test_gettext.py module.
  356. # Copyright (C) 2001 Python Software Foundation
  357. # Barry Warsaw <barry@python.org>, 2000.
  358. #
  359. msgid ""
  360. msgstr ""
  361. "Project-Id-Version: 2.0\n"
  362. "PO-Revision-Date: 2003-04-11 14:32-0400\n"
  363. "Last-Translator: J. David Ibanez <j-david@noos.fr>\n"
  364. "Language-Team: XX <python-dev@python.org>\n"
  365. "MIME-Version: 1.0\n"
  366. "Content-Type: text/plain; charset=iso-8859-1\n"
  367. "Content-Transfer-Encoding: 8bit\n"
  368. "Generated-By: pygettext.py 1.1\n"
  369. "Plural-Forms: nplurals=2; plural=n!=1;\n"
  370.  
  371. #: test_gettext.py:19 test_gettext.py:25 test_gettext.py:31 test_gettext.py:37
  372. #: test_gettext.py:51 test_gettext.py:80 test_gettext.py:86 test_gettext.py:92
  373. #: test_gettext.py:98
  374. msgid "nudge nudge"
  375. msgstr "wink wink"
  376.  
  377. #: test_gettext.py:16 test_gettext.py:22 test_gettext.py:28 test_gettext.py:34
  378. #: test_gettext.py:77 test_gettext.py:83 test_gettext.py:89 test_gettext.py:95
  379. msgid "albatross"
  380. msgstr ""
  381.  
  382. #: test_gettext.py:18 test_gettext.py:24 test_gettext.py:30 test_gettext.py:36
  383. #: test_gettext.py:79 test_gettext.py:85 test_gettext.py:91 test_gettext.py:97
  384. msgid "Raymond Luxury Yach-t"
  385. msgstr "Throatwobbler Mangrove"
  386.  
  387. #: test_gettext.py:17 test_gettext.py:23 test_gettext.py:29 test_gettext.py:35
  388. #: test_gettext.py:56 test_gettext.py:78 test_gettext.py:84 test_gettext.py:90
  389. #: test_gettext.py:96
  390. msgid "mullusk"
  391. msgstr "bacon"
  392.  
  393. #: test_gettext.py:40 test_gettext.py:101
  394. msgid ""
  395. "This module provides internationalization and localization\n"
  396. "support for your Python programs by providing an interface to the GNU\n"
  397. "gettext message catalog library."
  398. msgstr ""
  399. "Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba\n"
  400. "fhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH\n"
  401. "trggrkg zrffntr pngnybt yvoenel."
  402.  
  403. # Manually added, as neither pygettext nor xgettext support plural forms
  404. # in Python.
  405. msgid "There is %s file"
  406. msgid_plural "There are %s files"
  407. msgstr[0] "Hay %s fichero"
  408. msgstr[1] "Hay %s ficheros"
  409. '''
  410.  
  411. # Here's the second example po file example, used to generate the UMO_DATA
  412. # containing utf-8 encoded Unicode strings
  413.  
  414. '''
  415. # Dummy translation for the Python test_gettext.py module.
  416. # Copyright (C) 2001 Python Software Foundation
  417. # Barry Warsaw <barry@python.org>, 2000.
  418. #
  419. msgid ""
  420. msgstr ""
  421. "Project-Id-Version: 2.0\n"
  422. "PO-Revision-Date: 2003-04-11 12:42-0400\n"
  423. "Last-Translator: Barry A. WArsaw <barry@python.org>\n"
  424. "Language-Team: XX <python-dev@python.org>\n"
  425. "MIME-Version: 1.0\n"
  426. "Content-Type: text/plain; charset=utf-8\n"
  427. "Content-Transfer-Encoding: 7bit\n"
  428. "Generated-By: manually\n"
  429.  
  430. #: nofile:0
  431. msgid "ab\xc3\x9e"
  432. msgstr "\xc2\xa4yz"
  433. '''
  434.  
  435. # Here's the third example po file, used to generate MMO_DATA
  436.  
  437. '''
  438. msgid ""
  439. msgstr ""
  440. "Project-Id-Version: No Project 0.0\n"
  441. "POT-Creation-Date: Wed Dec 11 07:44:15 2002\n"
  442. "PO-Revision-Date: 2002-08-14 01:18:58+00:00\n"
  443. "Last-Translator: John Doe <jdoe@example.com>\n"
  444. "Jane Foobar <jfoobar@example.com>\n"
  445. "Language-Team: xx <xx@example.com>\n"
  446. "MIME-Version: 1.0\n"
  447. "Content-Type: text/plain; charset=iso-8859-15\n"
  448. "Content-Transfer-Encoding: quoted-printable\n"
  449. "Generated-By: pygettext.py 1.3\n"
  450. '''
  451.